home *** CD-ROM | disk | FTP | other *** search
- {
- > H E L P!!! I need help with the timer Interrupt... I guess? Here
- > is what I would like to do, I want to have the Time in the upper right
- > hand corner updated by the second. I was told that I need to "hook in
- > to the timmer interrupt" but, how do I do that? Any help would be
- > appreciated. And if possible make it as non technical as possable.
-
- Here is just the program your looking for!
- }
- Program Clock_demo;
- {$M $400 ,0 ,0} { Stack Size $400 , No Heap }
- {$F+}
- Uses Dos ,Crt;
- Var
- Count:Byte; { Counts Seconds }
- Time:Longint Absolute $40:$6C; { Bios Keeps Clock Time Here }
- Old1Cint:Procedure; { Linkage To Old 1C Interrupt }
-
-
- { Every 18 Pulses Shows Time At The Left Corner Of Screen }
- Procedure Get_Time;Interrupt;
- Var X ,Y:Byte;
- Hour ,Minute ,Sec:Word;
- Begin
- Inc(Count);
- If Count =18 Then { Every Second 18.2 Pulses }
- Begin
- Count:=0;
- X:=Wherex; { Save Cursor Place }
- Y:=Wherey;
- Hour:=Time Div 65520; { Calculate Hours. In Each Hour }
- { 18.2 * 60 * 60 Pulses }
- Minute:=Time Mod 65520 Div 1092; { Calculate Minutes. In Each }
- { Minute 18.2 * 60 Pulses }
- Sec:=Round((Time Mod 65520 Mod 1092) / 18.2) Mod 60; { Seconds }
- Gotoxy(70 ,1); { Left Corner Of Screen }
- { Write time }
- If Hour<10 Then
- Write(0,Hour,':')
- Else
- Write(Hour,':');
- If Minute<10 Then
- Write(0,Minute,':')
- Else
- Write(Minute,':');
- If Sec<10 Then
- Write(0,Sec)
- Else
- Write(Sec);
- Gotoxy(X ,Y); { Restore Cursor Position }
- End;
- Inline($9C); { Pushf - Push Flags }
- Old1Cint; { Link Old 1C Procedure }
- End;
-
- Begin { Of Main Program }
- Count:=0; { Clock Pulses Counter }
- Getintvec($1C ,@Old1Cint); { Save Old 1C Interrupt Vector }
- Setintvec($1C ,@Get_Time); { Insert Current Interurupt Procedure }
- Keep(0); { Terminate And Stay Resident - Tsr }
- End.
-